<?php
/**
 * Notice.class.php
 *
 * @author 周剑锋 <camfee@foxmai.com>
 */

namespace controls\MobileApi\Center;

use Center\ActiveOffer;
use Center\Shop;
use MobileApi\ApiBase;
use Notice\RedDot;
use Notice\Sys;

/**
 * 用户 - 消息&通知
 *
 * @package Center
 * @author  周剑锋 <camfee@foxmai.com>
 * @since   1.3.0 2017-01-03
 */
class Notice extends ApiBase
{
    /**
     * 获得我的消息列表
     *
     * <pre>
     * GET
     *     type:   可选， 消息类型 1：商家有礼消息 2：低价购消息 默认1
     *     offset: 可选， 偏移量 默认0
     *     limit:  可选， 每次数量, 最高不超过50 默认10
     * </pre>
     *
     * @return void|string 返回JSON数据
     *
     * <pre>
     * {
     *   "Status": 200,
     *   "Result": {
     *      "RedDot": 1           // offset=0返回 是否有未读消息 1：是 0：否
     *      "Total": 1,  // 总数
     *      "List": [    //没有则为[]  type=1（消息）
     *       {
     *         "Type": 1,   // 消息样式类型, 1：活动结果即将公布通知 2：结果公示通知 3：活动获奖通知 4：邀请人消息 5：系统消息 6：赠送金果 7:电子券获奖通知
     *         "Title": "系统消息", // 消息标题
     *         "Cont": "消息内容消息内容内容，容。",        // 消息内容
     *         "Scheme": "",               // 消息跳转地址
     *         "Date": "2015-11-17 08:00"       //消息日期
     *       }
     *     ],...
     *   }
     * }
     *
     * 异常状态：
     * 201：消息类型错误
     * </pre>
     */
    public function getNoticeList()
    {
        $uid = $this->isLogin(true);
        $type = (int)$_GET['type'];
        $offset = (int)$_GET['offset'];
        $limit = (int)$_GET['limit'];
        $offset = max(0, $offset);
        $limit = $limit < 1 ? 10 : min($limit, 50);
        $limit = $offset + $limit - 1;

        $data = [];
        $count = Sys::getAllNum($uid, $type);
        if ($count > 0) {
            $list = Sys::getNotice($uid, $type, $offset, $limit);
            if (is_array($list) && count($list) > 0) {
                $task = loadconf('mobileapi/task');
                foreach ($list as $k => $v) {
                    $scheme = '';
                    if (!in_array($v['type'], [Sys::TYPE_MSG_ACT_OVER, Sys::TYPE_MSG_INVITE])) {
                        $scheme = 'gold://app/main';
                    }
                    if (!empty($v['url'])) {
                        $scheme = $v['url'];
                    }
                    $title = $task[$v['type']]['Title'];
                    $cont = $task[$v['type']]['TaskName'];
                    if (!empty($v['title'])) {
                        $title = $v['title'];
                    }
                    if (!empty($v['cont'])) {
                        $cont = $v['cont'];
                    }
                    $data[] = [
                        'Type' => $v['type'],
                        "Scheme" => $scheme,
                        'Title' => $title,
                        'Cont' => $cont,
                        'Date' => $this->formatTime($v['t']),
                    ];
                }
            }
        }
        $group_num = Sys::GROUP_NUM_LIST;
        // 设置消息为已读
        Sys::setNum($uid, $group_num[$type], 0);
        // 取消红点
        RedDot::setDot($uid, 0);
        $res = [
            'Total' => $count,
            'List' => $data
        ];
        if ($offset == 0) {
            $num = Sys::getNum($uid);
            $numtype = Sys::GROUP_NUM_LIST;
            $res['RedDot'] = !empty($num[$numtype[$type]]) ? 1 : 0;
        }

        $this->output(200, $res);
    }

    /**
     * 消息图文详情
     *
     * <pre>
     * GET:
     *      noticeid: 必选, 消息id
     * </pre>
     *
     * @return void|string 返回JSON数据
     *
     * <pre>
     * {
     *     "Status": 200,
     *     "Result": {
     *         "NoticeId": 1,
     *         "NoticeTitle": "消息标题",
     *         "Time": "2017－07-06  13:23",
     *         "Content": "<h5>消息标题</h5>消息标题：\n1、价格区间为1000-3000元，可输入n位小数\n2、每人最多可参加m次该活动\n3、用户在区间内输入价格，出价唯一且最高的人获得该商品，如果出价都不唯一，则取人数最少且出价最高的几个用户每人获得一个该商品\n4、获得商家赠送礼品的用户凭注册时对应的身份证号的身份证原价于N个工作日内，前往商家地址领取商品。\n4、最终解释权归＊＊＊"
     *     },
     *     "ServerTime": 1511663570
     * }
     * 异常状态
     * 201: 参数错误
     * </pre>
     */
    public function getNoticeInfo()
    {
        $uid = $this->isLogin(true);
        $noticeid = intval($_GET['noticeid']);
        $info = \Center\Notice::getInfoByIds($noticeid);
        if (empty($info)) {
            $this->output(201, '参数错误');
        }

        $data = [
            'NoticeId' => $info['Id'],
            'NoticeTitle' => $info['Title'],
            'Time' => $info['CreateTime'],
            'Content' => $info['Content']
        ];

        $this->output(200, $data);
    }

    /**
     * 活动获奖通知详情
     *
     * <pre>
     * GET:
     *      activeid: 必选, 活动id
     * </pre>
     *
     * @return void|string 返回JSON数据
     *
     * <pre>
     * {
     *     "Status": 200,
     *     "Result": {
     *         "Title": "活动结果公示标题",
     *         "Time": "2017－07-06  13:23",
     *         "Price": "¥4534.98", // 出价
     *         "Desc": "恭喜你以¥4534.98的出价在活动中胜出\n凭以下二维码，携带好注册时身份证号对应的身份证，本人在中奖后N个工作日内，亲自前往商家地址即可免费领取该活动商品",
     *         "QrCodeUrl": "二维码图片地址",
     *         "ActiveName": "活动名",
     *         "Address": "地址",
     *         "Mobile": "联系电话",
     *         "Abscissa": "坐标经度",
     *         "Ordinate": "坐标纬度",
     *     },
     *     "ServerTime": 1511662465
     * }
     * 异常状态
     * 201: 活动不存在
     * 202: 活动数据不正常
     * 203: 您没有中奖
     *
     * </pre>
     */
    public function getPrizeInfo()
    {
        $uid = $this->isLogin(true);
        $activeid = intval($_GET['activeid']);
        $active = \Center\Active::getInfoByIds($activeid);
        $shop = Shop::getInfoByIds($active['ShopId']);
        $active_offer = ActiveOffer::getList(['ActiveId' => $activeid, 'UserId' => $uid, 'Status' => 1], 0, 1);
        if (empty($active)) {
            $this->output(201, '活动不存在');
        }
        if (empty($shop)) {
            $this->output(202, '活动数据不正常');
        }
        if (empty($active_offer['data'])) {
            $this->output(203, '您没有中奖');
        }
        $active_offer = $active_offer['data'][0];
        $data = [
            'Title' => $active['Name'],
            'Time' => $active['CreateTime'],
            'Price' => '¥' . $active_offer['OfferPrice'],
            'Desc' => "恭喜你以¥{$active_offer['OfferPrice']}的出价在活动中胜出\n凭以下二维码，携带好注册时身份证号对应的身份证，本人在中奖后{$active['RewardDays']}个工作日内，亲自前往商家地址即可免费领取该活动商品",
            'QrCodeUrl' => '二维码图片地址', // TODO ewm url
            'ActiveName' => $active['Name'],
            'Address' => $shop['Address'],
            'Mobile' => $shop['Mobile'],
            'Abscissa' => $shop['Abscissa'],
            'Ordinate' => $shop['Ordinate'],
        ];

        $this->output(200, $data);
    }

    /**
     * 电子券类型消息详情
     *
     * <pre>
     * GET:
     *      activeid: 必选, 活动id
     * </pre>
     *
     * @return void|string 返回JSON数据
     *
     * <pre>
     * {
     *     "Status": 200,
     *     "Result": {
     *         "Title": "电子券类型消息详情",
     *         "Time": "2017－07-06  13:23",
     *         "Price": "¥4534.98", // 出价
     *         "Desc": "恭喜你以¥4534.98的出价在活动中胜出\n凭以下二维码，携带好注册时身份证号对应的身份证，本人在中奖后N个工作日内，亲自前往商家地址即可免费领取该活动商品",
     *         "QrCodeUrl": "二维码图片地址",
     *         "ActiveName": "活动名",
     *         "Address": "地址",
     *         "Mobile": "联系电话",
     *         "Abscissa": "坐标经度",
     *         "Ordinate": "坐标纬度",
     *     },
     *     "ServerTime": 1511662465
     * }
     * 异常状态
     * 201: 参数错误
     *
     * </pre>
     */
    public function getCouponInfo()
    {
        $uid = $this->isLogin(true);
        $activeid = intval($_GET['activeid']);
        $active = \Center\Active::getInfoByIds($activeid);
        $shop = Shop::getInfoByIds($active['ShopId']);
        $active_offer = ActiveOffer::getList(['ActiveId' => $activeid, 'UserId' => $uid, 'Status' => 1], 0, 1);
        if (empty($active) || empty($shop) || empty($active_offer['data'])) {
            $this->output(201, '参数错误');
        }
        $active_offer = $active_offer['data'][0];
        $data = [
            'Title' => $active['Name'],
            'Time' => $active['CreateTime'],
            'Price' => '¥' . $active_offer['OfferPrice'],
            'Desc' => "恭喜你以¥{$active_offer['OfferPrice']}的出价在活动中胜出\n获奖商品现金电子券抵扣券已发放到个人中心－我的电子券中，请前往查看，具体使用规则参见电子券说明。最终解释权归商家所有，可参见如下地址前往商家了解详情",
            'QrCodeUrl' => '二维码图片地址', // TODO emw url
            'ActiveName' => $active['Name'],
            'Address' => $shop['Address'],
            'Mobile' => $shop['Mobile'],
            'Abscissa' => $shop['Abscissa'],
            'Ordinate' => $shop['Ordinate'],
        ];

        $this->output(200, $data);
    }

    /**
     * 清空消息
     *
     * <pre>
     * POST:
     *     type:   可选， 消息类型 0：全部 1：商家有礼消息 2：低价购消息 默认0
     * </pre>
     *
     * @return void|string 返回JSON数据
     *
     * <pre>
     * {
     *     "Status": 200,
     *     "Result": {}
     * }
     *
     * 异常状态
     * 201:消息类型错误
     * 202:清空失败
     * </pre>
     */
    public function clearNotice()
    {
        $uid = $this->isLogin(true);
        $type = (int)$_POST['type'];
        $type = $type < 1 ? 1 : $type;
        if ($type > 3) {
            $this->output(201, '消息类型错误');
        }
        $rel = Sys::clearNotice($uid, $type);
        if (empty($rel)) {
            $this->output(202, '清空失败');
        }

        $this->output();
    }


    /**
     * 格式化时间（获取消息的时候需要）
     *
     * @param $timer
     * @return bool|string
     */
    private function formatTime($timer)
    {
        $str = '';
        if (!empty($timer)) {
            $str = date('Y-m-d H:i', $timer);
        }

        return $str;
    }
}